#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
#include"HashTable.h"

class Date
{
public:
	Date(int year = 1,int month = 1,int day = 1)
		:_y(year)
		,_m(month)
		,_d(day)
	{}

	int _y;
	int _m;
	int _d;
};

struct HashDate
{
	size_t operator()(const Date& date)
	{
		return  date._y + date._m + date._d;
	}
};

void test1()
{
	//openAddr::HashTable<int> ht;
	//ht.insert(1);
	//ht.insert(5);
	//ht.insert(8);
	//ht.insert(10);
	//ht.insert(11);
	//ht.insert(21);
	//ht.insert(21);
	//ht.insert(28);

	// //cout << ht.find(19) << endl;
	//cout << ht.erase(10) << endl;
	//cout << ht.erase(19) << endl;
	//openAddr::HashTable<string> ht2;
	//ht2.insert("1hhhh");
	//ht2.insert("4hhhh");
	//ht2.insert("5hhhh");
	//ht2.insert("2hhhh");
	//ht2.insert("0hhhh");


	Date d1(2024, 5, 6);
	Date d2(2024, 6, 6);
	Date d3(2024, 7, 8);
	Date d4(2025, 7, 8);

	openAddr::HashTable<Date, HashDate> ht3;
	ht3.insert(d1);
	ht3.insert(d2);
	ht3.insert(d3);
	ht3.insert(d4);
}

void test2()
{
	HashBucket::HashTable<int, int> ht(10);
	ht.insert(1);
	ht.insert(11);
	ht.insert(21);
	ht.insert(31);
	ht.insert(41);
	ht.insert(51);
	ht.insert(8);
	ht.insert(18);
	ht.insert(34);
	ht.insert(25);
	ht.erase(51);
}

int main()
{
	//test1();
	test2();
	return 0;
}